// pages/function/sub/login-wechat.js
const APP = getApp();

Page({

  /**
   * 页面的初始数据
   */
  data: {
    //固定参数
    dataEmptyImg: '/asset/img/empty/icon_list_empty.png',
    dataEmptyTip:'暂无数据',
    //布局参数
    //微信变量
    canIUseGetUserProfile:true,
    dataWxJsCode:'',
    dataWxEncryptedData: '',
    dataWxIv: '',
    dataWxRawData:'',
    dataWxUserInfo:{},//性别：0》未知；1》男；2》女；
    dataWxSignature:'',
    //逻辑变量
    dataBackFlag:0,//返回继续操作（选项：0》不返回；1》仅返回；2》返回且刷新；）
    isBtnDisabled:false,

    isNeedPrivacy:false,
    privacies:[
        '获取唯一标识，用于快捷登录',
        '获取位置信息，用于限制范围',
        '更多，请点击《查看隐私协议》',
    ]
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    let _this = this;

    //刷新标识
    if(options.refresh){
      //刷新标识：refresh=1
      _this.data.dataBackFlag = parseInt(options.refresh);
    }
    //操作检测
    if(wx.getUserProfile){
      _this.setData({
        canIUseGetUserProfile:true
      });
    };
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    let _this = this;

    this.init();
    // _this.doWxLogin(null);
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    //打开登录提示
    APP.globalData.wxmp_login_enabled = true;
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },

  /**
   * 逻辑区域
   */

   //初始化
   init(){
        wx.getPrivacySetting({
            success: res => {
            // 返回结果为: res = { needAuthorization: true/false, privacyContractName: '《xxx隐私保护指引》' }
            APP.applog.debug(['wx.getPrivacySetting',res]);
            this.data.isNeedPrivacy = res.needAuthorization;
            },
            fail: () => {},
            complete: () => {}
        });
    },

    privacySynchReffer(ref){        
        APP.globalData.privacyRef = ref.detail;
    },

  //微信登录评证
  doWxLogin:function(callback){
    let _this = this;
    wx.login({
      success(res) {
        if (res.code) {
          //用户登录凭证（有效期五分钟）
          _this.setData({
            dataWxJsCode: res.code
          },function(){
            callback && callback();
          });
        } else {
          APP.applog.error(res.errMsg);
        }
      }
    });
  },
  //获取微信数据(新方式)
  getUserProfile:function(event){
    let _this = this;
    if(this.data.isNeedPrivacy){
        APP.globalData.privacyRef.data.checkPrivacy(function(){
            APP.apptool.showToastInfo('授权成功，请点击登录!');
            _this.init();
        });
    }else{
        this.setData({
            isBtnDisabled:true
        });

        wx.getUserProfile({
            lang: 'zh_CN',
            desc: '用于微信快捷登录',
            success: function (res) {
                APP.applog.info(res);

                _this.setData({
                    dataWxRawData: res.rawData,
                    dataWxIv: res.iv,
                    dataWxEncryptedData: res.encryptedData,
                    dataWxSignature: res.signature,
                    dataWxUserInfo: res.userInfo
                }, function () {
                    _this.doBindWechat(function(){
                        _this.setData({
                            isBtnDisabled:false
                        });
                    });
                })
            },fail(err){
                _this.setData({
                    isBtnDisabled:false
                });
            }
        });
    }
  },
  //获取微信数据(旧方式)
  getUserInfo:function(event){
    let _this = this;

    if(this.data.isNeedPrivacy){
        APP.globalData.privacyRef.data.checkPrivacy(function(){
            APP.apptool.showToastInfo('授权成功，请点击登录!');
            _this.init();
        });
    }else{
        wx.getUserInfo({
            lang: 'zh_CN',
            withCredentials: true,
            success: function (res) {
                APP.applog.info(res);
                
                _this.setData({
                    dataWxRawData: res.rawData,
                    dataWxIv: res.iv,
                    dataWxEncryptedData: res.encryptedData,
                    dataWxSignature: res.signature,
                    dataWxUserInfo: res.userInfo
                }, function () {
                    _this.doBindWechat(function(){
                        _this.setData({
                            isBtnDisabled:false
                        });
                    });
                });
            },fail(err){
                _this.setData({
                    isBtnDisabled:false
                });
            }
        });
    }
  },
  //微信登录或绑定
  doBindWechat:function(completedcallback){
    let _this = this;
    
    _this.doWxLogin(function(){
      APP._post('/miniprogram/BasicLogin/personalWxlogin', {
        js_code:_this.data.dataWxJsCode,
        raw_data: encodeURI(_this.data.dataWxRawData),//有汉字必须转义
        signature:_this.data.dataWxSignature,
        action:'wxlogin',
      }, null, function (res) {
        //执行成功
        if (res.caCode === APP.appconfig.fwcode.successed) {
          APP.appauth.setUserCacheData(res.caData);
          _this.doNavigateUrl();
        } else {
          APP.apptool.showToastInfo(res.caMsg);
        }
      }, function (res) {
        //执行失败
      }, function (res) {
        //执行完成
        completedcallback && completedcallback();
      });
    });
  },
  //跳转控制
  doNavigateUrl:function(){
    let _this = this;
    if(_this.data.dataBackFlag>0){
      APP.apptool.showToastInfo('登录成功，请继续操作！', null, 2000, function (res) {
        APP.apptool.navigateBackPage(1, function (targetPage) {
          if(2 == _this.data.dataBackFlag){
            //需刷新数据面，必须实现refreshPage()方法
            targetPage.refreshPage();
          }
        });
      });
    }else{
      wx.reLaunch({
        url: '/pages/layout/index',
      });
    }
  },
  //取消登录
  cancelLogin: function(event){
    wx.navigateBack({
      delta:1
    });
  },
  //查看协议
  clickProtocol:function(event){
    //执行成功
    let webinfo = APP.apptool.encodeJsonStr({weburl:'http://www.baidu.com',webtitle:'用户注册协议'});
    wx.navigateTo({
      url: '/pages/function/sub/webpage?webinfo='+webinfo,
    });
  }
})